﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Resources;

namespace Lcsoft.UrlRewriter.Utilities
{
	/// <summary>
	/// 表示地址重写组件的消息处理程序。
	/// </summary>
	internal static class MessageProvider
	{
		private static readonly Dictionary<Message, string> _messageCache = new Dictionary<Message, string>();
		private static readonly ResourceManager _resources = new ResourceManager(Constants.Messages, Assembly.GetExecutingAssembly());

		/// <summary>
		/// 格式化指定的消息。
		/// </summary>
		/// <param name="message"><see cref="Message"/> 枚举值之一。</param>
		/// <param name="args">一个对象数组，其中包含零个或多个要设置格式的对象。</param>
		/// <returns>返回消息副本，其中的格式项已替换为 <paramref name="args"/> 中相应对象的字符串表示形式。</returns>
		public static string FormatString(Message message, params object[] args)
		{
			string format;

			ICollection ic = _messageCache;

			lock (ic.SyncRoot)
			{
				if (_messageCache.ContainsKey(message)) format = _messageCache[message];
				else
				{
					format = _resources.GetString(message.ToString());

					if (format != null) _messageCache.Add(message, format);
				}
			}

			return String.IsNullOrEmpty(format) ? String.Empty : String.Format(format, args);
		}
	}
}
